﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Program17
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 随机生成1000个不重复的数
            //int[] nums = new int[1000];
            //Random rd = new Random();
            //ArrayList arr = new ArrayList();

            //while (arr.Count < 1000)
            //{
            //    int tmp = rd.Next(1, 2000);
            //    //判断是否在队列中
            //    if (!arr.Contains(tmp))
            //    {
            //        arr.Add(tmp);
            //    }
            //}
            //for (int i = 0; i < nums.Length; i++)
            //{
            //    nums[i] =(int)arr[i];
            //}

            //Array.Sort(nums);

            //foreach (var item in nums)
            //{
            //    Console.Write(item + " ");
            //}
            #endregion

            #region 随机生成两个数组
            int[] nums1 = new int[10];
            int[] nums2 = new int[6];
            ArrayList arr = new ArrayList();
            Random rd = new Random();
            Console.WriteLine("数组1：");
            while (arr.Count < 10)
            {
                int tmpNum = rd.Next(1, 15);
                arr.Add(tmpNum);
            }
            for (int i = 0; i < nums1.Length; i++)
            {
                nums1[i] = (int)arr[i];
                Console.Write(nums1[i] + " ");
            }
            arr = new ArrayList();
            Console.WriteLine();
            Console.WriteLine("数组2：");
            while (arr.Count < 6)
            {
                int tmpNum = rd.Next(1, 15);
                arr.Add(tmpNum);
            }
            for (int i = 0; i < nums2.Length; i++)
            {
                nums2[i] = (int)arr[i];
                Console.Write(nums2[i] + " ");
            }
            Console.WriteLine();
            #endregion

            #region 两个数组合并成一个去掉重复数

            //用队列的方法进行判断
            //for (int i = 0; i < nums1.Length; i++)
            //{
            //    //判断是的在这个队列中
            //    if (!arr.Contains(nums1[i]))
            //    {
            //        arr.Add(nums1[i]);
            //        if (!arr.Contains(nums2[i]))
            //        {
            //            arr.Add(nums2[i]);
            //        }
            //    }
            //}
            #endregion

            #region 用普通的方法进行判断

            int[] tmpArr = new int[nums1.Length+nums2.Length]; //并集
            int index = 0; //插入的位置
            bool flag = true; //是否有重复元素的标识

            //先遍历nums1，把不重复的元素添加到tmpArr
            for (int n = 0; n < nums1.Length; n++)
            {
                //检查tmpArr在index之前是否有重复元素
                for (int m = 0; m < index; m++)
                {
                    if (tmpArr[m] == nums1[n])
                    {
                        flag = false;
                    }
                }
                //如果没有，添加
                if (flag)
                {
                    tmpArr[index++] = nums1[n];
                }
                flag = true; //重置
            }

            //先遍历nums2，把不重复的元素添加到tmpArr
            for (int n = 0; n < nums2.Length; n++)
            {
                //检查tmpArr在index之前是否有重复元素
                for (int m = 0; m < index; m++)
                {
                    if (tmpArr[m] == nums2[n])
                    {
                        flag = false;
                    }
                }
                //如果没有，添加
                if (flag)
                {
                    tmpArr[index++] = nums2[n];
                }
                flag = true; //重置
            }

            #endregion
            Array.Sort(tmpArr);
            Console.WriteLine("两数组的并集：");
            foreach (var item in tmpArr)
            {
                Console.Write(item + " ");
            }
            Console.ReadLine();
        }
    }
}
